from sys import argv
from typing import TextIO                       #从sys导入argv模块
script,input_file = argv                        #将argv模块解包，将第一个参数赋值给script，第二个参数赋值给input_file

def Print_All(f:TextIO):                        #定义了一个Print_All函数，参数只有一个文件f
    print(f.read())                             #输出f文件里面全部的内容

def rewind(f):                                  #定义了一个rewind函数，参数只有一个文件类型的变量f
    f.seek(0)                                   #rewind函数用于将文件指针重置到文件开头，seek（0）就是重置
                                                #到文件开头的意思

def print_a_line(line_count,f):                 #定义了一个print_a_line，用于打印一行的函数，line_count是行号的意思，f是文件类型
    print(line_count,f.readline())              #输出行号，f当前的一行，调用readline()函数之后，函数指针会到下一行的开头位置

current_file:TextIO = open(input_file)          #current_file是一个文件指针类型，用于存储打开的input_file文件指针类型
print("First let's print the whole file:\n")    #输出“First let's print the whole file:\n”
Print_All(current_file)                         #调用Print_All，输出current_file指向文件里面的全部的内容

print("Now let's rewind,kind of like a tape.")  #输出Now let's rewind,kind of like a tape.
rewind(current_file)                            #调用rewind函数，将current_file传入，将文件指针指向文件开头
print("Let's print three lines:")               #输出“Let's print three lines:”
current_line = 1                                #将1赋值给current_line，代表第一行
print_a_line(current_line,current_file)         #调用print_a_line函数，传入current_line和current_file，输出文件第一行的内容
current_line += 1                               #current_line递增1
print_a_line(current_line,current_file)         #调用print_a_line函数，传入current_line和current_file，输出文件第二行的内容
current_line = current_line+1                   #current_line递增1
print_a_line(current_line,current_file)         #调用print_a_line函数，传入current_line和current_file，输出文件第三行的内容
